`timescale 1ns / 1ps
/////////////////////////////////////////////////////////////////////////////
////                                                                     ////
//// Instituto Tecnologico de Costa Rica                                 ////
////                                                                     ////
//// Modulo Escritura                                                    ////
////                                                                     ////
//// Este archivo es parte del proyecto: Comprobador sencillo de memoria ////
//// http://repositorio-charmander.googlecode.com/svn/trunk/             ////
////                                                                     ////
//// Descripcion                                                         ////
//// Implementacion de un sencillo comprobador de memoria como proyecto  ////
//// del curso de Taller de Diseo Logico.                                ////
////                                                                     ////
//// Funcionamiento:                                                     ////
//// - Se encarga de hacer la escritura en la memoria, en este caso el   ////
////   usuario puede escribir 3 valores que son determinados por los     //// 
////   switch. Estos son los valores:                                    ////
////                                                                     ////
////                    |Parametros |   Valor   |                        ////
////                    |   0001    |     F     |                        ////
////                    |   0010    |    10     |                        ////
////                    |   0100    |     5     |                        ////
////                    |   1000    | Manera Creciente |                 ////
////                    |   otros   | DEFAULT   |                        ////
////                                                                     ////                                    
//// Autores:                                                            ////
//// - Gia Chen, kathya0812@gmail.com                                    ////
////   Edgar Rojas, edtec217@gmail.com                                   ////
////                                                                     ////
/////////////////////////////////////////////////////////////////////////////

module escritura(_clk_seg_i, Input_Parameter_i, escriba_i, termino_escribir_o, value_escribir_o);

	//ENTRADAS
	 input _clk_seg_i; //Clock de 1 Hz
	 input [3:0] Input_Parameter_i;
	 input  escriba_i;
		 
	 //SALIDAS
	 output reg termino_escribir_o;
	 output reg [7:0] value_escribir_o;
	 
	 reg [3:0] address;
	 reg inicio;
	 
	 always @(posedge _clk_seg_i)  //Cada vez que el clock pase a flanco positivo
	 begin
			if (inicio)
			begin
				//$display("Reinicie");
				address =0;
				termino_escribir_o = 0;
				inicio = 0;
			end
			else if (escriba_i) 
			begin
				if (address <= 15)
				begin
					if (Input_Parameter_i == 4'b0001) 
					begin 
						value_escribir_o = 8'b00001111;
					end
					else if (Input_Parameter_i == 4'b0010)
					begin 
						value_escribir_o = 8'b00001010;
					end
					else if (Input_Parameter_i == 4'b0100) 
					begin
						value_escribir_o = 8'b00000101;					
					end 
					else if (Input_Parameter_i == 4'b1000) 
					begin
						value_escribir_o = address;					
					end 
					else 
						begin
							value_escribir_o = 8'b00000000;
						end				
					address = address + 1;
					//$display("Address es: %d", address);
					//$display("Inicio es: %d", inicio);
					if (address == 15)
					begin
						//$display("Termino de escribir");
						termino_escribir_o=1;
						inicio=1;
					end
				end//end del else if escriba_i
			else
				begin
					inicio=1;
				end
			end//if inicio 
		end//end del always
endmodule
